import 'package:flutter/material.dart';

class Second extends StatelessWidget {

  const Second({super.key});

  @override
  Widget build(BuildContext context) {
      return MaterialApp(

          title: "second",
          theme: ThemeData(
            colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
            useMaterial3: true,

        ),

        home: const SecondHomePage(),
        // home: Scaffold(
        //   body: Column(
        //     children: [
        //       Image.asset(
        //         "images/aaa.jpg",
        //         width: 12,
        //         height: 12,
        //       ),
        //       ListView(
        //         children: const [
        //           ListTile(
        //             title: Text("11111"),
        //             leading: Icon(Icons.map),
        //           ),
        //         ],
        //       )
        //     ],
        //   )
        //
        // )

      );
  }

}

class SecondHomePage extends StatefulWidget {
  const SecondHomePage({super.key});

  @override
  State<SecondHomePage> createState() => _SecondHomePageState();


}

class _SecondHomePageState extends State <SecondHomePage> {



  @override
  Widget build(BuildContext context) {

   // final List<String> items = List<String>.generate(100, (i) => 'Item $i');

    final List<ListItem> items = List<ListItem>.generate(
      1000,
          (i) => i % 6 == 0
          ? HeadingItem('Heading $i')
          : MessageItem('Sender $i', 'Message body $i'),
    );

    return Scaffold(

      appBar: AppBar(
        title: const Text("1111"),
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        // leading: Container(
        //   child: IconButton(
        //     icon: const Icon(Icons.arrow_back_ios),
        //     onPressed: () {
        //
        //
        //       Navigator.pop(context);
        //     },
        //
        //   ),
        // ),
      ),

      body: ListView.builder(

          itemCount: items.length,
          itemBuilder: (context,index) {
            final item = items[index];
              //return HeadingItem(item).builderTitle(context);
            return ListTile(
              title: item.builderTitle(context),
              subtitle: item.builderSubTitle(context),
            );
          }),

      // body: ListView.builder(
      //   itemCount: items.length,
      //   prototypeItem: ListTile(
      //     title: Text(items.first)
      //     ,),
      //   itemBuilder: (context,index) {
      //     return ListTile(
      //       title: Text(items[index]),
      //     );
      //   },
      // ),


      // body: ListView(
      //     children: const <Widget> [
      //       ListTile(
      //         title: Text("11111"),
      //         leading: Icon(Icons.map),
      //       ),
      //
      //       ListTile(
      //         title: Text("22222"),
      //         leading: Icon(Icons.book),
      //       ),
      //     ],
      // ),

    );

  }

}
// 标识一个类可以让类成为抽象类，抽象类将无法被实例化,也就是说不能直接使用抽象类，只能使用抽象类的子类。
// 抽象类定义的方法只定义不进行实现，就是抽象方法（还有抽象属性），需要子类进行方法实现，已经实现的方法就是普通方法。

abstract class ListItem {

  Widget builderTitle(BuildContext context);

  Widget builderSubTitle(BuildContext context);


}

//implements 来实现一个或多个接口并实现每个接口定义的 API，比如说想要创建一个 A 类支持调用 B 类的 API 且不想继承 B 类，则可以实现 B 类的接口。

class HeadingItem implements ListItem{
  final String headTitle;

  HeadingItem(this.headTitle);

  @override
  Widget builderSubTitle(BuildContext context) => const SizedBox.shrink();

  @override
  Widget builderTitle(BuildContext context) {
    return Text(
      headTitle,
      style: Theme.of(context).textTheme.bodyMedium,
    );
  }
}

class MessageItem implements ListItem {
  final String sender;
  final String body;

  MessageItem(this.sender, this.body);

  @override
  Widget builderSubTitle(BuildContext context) {
      return Text(body);
  }
  //为了方便可以这么写，等同于上面的写法
  @override
  Widget builderTitle(BuildContext context) => Text(sender);

}
